home *** CD-ROM | disk | FTP | other *** search
- 100 CLS:PRINT"Program CLUSTER.BAS - to cluster NSET sets of data with NOBS"
- 110 PRINT" observations in each set (HARD DISK VERSION).":PRINT
- 120 PRINT SPC(20);"Deane Wang - Cybersoft Group (Ver. 3/83)"
- 130 PRINT STRING$(80,"=")
- 140 '
- 150 OPTION BASE 1
- 155 DIM MA(40,100), NX(100), NY(100)
- 160 INPUT"Enter input dataset name";INA$
- 170 OPEN INA$ FOR INPUT AS #1
- 180 GOSUB 1000 'read in data, set up array MA(NSET,NOBS)
- 190 CLOSE #1
- 195 CLOSE #3: OPEN "SCRN:" FOR OUTPUT AS #3: N=NOBS
- 200 GOSUB 3000 '(CORR.BAS subroutine)
- 240 END
- 1000 REM
- 1010 PRINT:PRINT "Subroutine READAT.BAS - to read in data as MA(NSET,NOBS)"
- 1020 PRINT STRING$(70,"*"):PRINT
- 1030 '
- 1040 INPUT "Enter the number of sets of data (max. 40)";NSET
- 1050 INPUT "Enter the number of observations in each set (max. 100)";NOBS
- 1060 FOR I=1 TO NSET
- 1070 FOR J=1 TO NOBS
- 1080 INPUT#1,MA(I,J)
- 1090 NEXT J
- 1100 NEXT I
- 1120 RETURN
- 3000 REM
- 3010 PRINT:PRINT"Subroutine CORR.BAS - to take MA(NSET,NOBS) entered in the"
- 3020 PRINT "Main program and create a correlation matrix in C:CORRMAT.DAT."
- 3030 PRINT "Uses subroutine REGRESS.BAS, option base 1 in Main"
- 3040 PRINT STRING$(70,"*"):PRINT
- 3050 LCNT=0: RFLAG=0
- 3060 INPUT "Enter a 0 for R, 1 for r-squared";RFLAG
- 3070 CLOSE #2: OPEN "C:CORRMAT.DAT" FOR OUTPUT AS #2
- 3080 PRINT: PRINT "Calculating pairs ";
- 3085 IF RFLAG=1 THEN PRINT "for r-squares:" ELSE PRINT "for r:"
- 3090 IF RRR=1 THEN 3110 ELSE RRR=1
- 3100 '
- 3110 FOR IJ=1 TO (NSET-1)
- 3120 FOR J=IJ+1 TO NSET
- 3130 FOR K=1 TO NOBS
- 3140 NX(K)=MA(IJ,K): NY(K)=MA(J,K)
- 3150 NEXT K
- 3160 GOSUB 5000 'regression subroutine for individual nx, ny's
- 3170 IF RFLAG=0 THEN R2=SQR(R2) 'matrix of r (correlation coef)
- 3180 LCNT=LCNT+1
- 3190 PRINT#2,USING "##.####";R2;
- 3200 IF LCNT=10 THEN LCNT=0: PRINT#2,
- 3210 PRINT " *";:PRINT USING "###";IJ;J;
- 3215 NEXT J: PRINT
- 3220 NEXT IJ
- 3230 CLOSE #2: RETURN
- 5000 '
- 5010 REM LINEAR REGRESSION OF Y ON X - SUBROUTINE
- 5020 '
- 5030 ' NEED IN THE MAIN PROGRAM:
- 5040 '
- 5050 ' n = number of observations
- 5060 ' dim nx(n), ny(n)
- 5070 ' open "scrn:" for output as #3
- 5080 '
- 5090 ' INITILIZE SUMS
- 5100 '
- 5110 XSUM=0!: YSUM=0! 'sums
- 5120 XSS=0!: YSS=0! 'sums of squares
- 5130 XYS=0! 'sum of x*y
- 5140 A=0!: B=0!: R2=0!
- 5150 '
- 5160 ' CALCULATE SUMS, SUMS SQUARES, SUM X*Y
- 5170 '
- 5180 FOR I=1 TO N
- 5190 XSUM=NX(I)+XSUM
- 5200 XSS=NX(I)*NX(I)+XSS
- 5210 YSUM=NY(I)+YSUM
- 5220 YSS=NY(I)*NY(I)+YSS
- 5230 XYS=NX(I)*NY(I)+XYS
- 5240 NEXT I
- 5250 '
- 5260 ' CALCULATE SLOPE(B), INTERCEPT(A), R**2 (R2)
- 5270 '
- 5280 XSUM2=XSUM*XSUM
- 5290 YSUM2=YSUM*YSUM
- 5300 XSYS=XSUM*YSUM
- 5310 BN=XYS-(XSYS/N)
- 5320 BD=XSS-(XSUM2/N)
- 5330 B=BN/BD
- 5340 AI=YSUM/N
- 5350 ASS=B*(XSUM/N)
- 5360 A=AI-ASS
- 5370 RD2=YSS-(YSUM2/N)
- 5380 R2=BN*BN/(BD*RD2)
- 5390 '
- 5395 RETURN 'skip printing out for this version
- 5400 ' CALCULATE USUAL STATISTICS
- 5410 '
- 5420 XBAR=XSUM/N
- 5430 XDEV=SQR(BD/(N-1))
- 5440 YBAR=YSUM/N
- 5450 YDEV=SQR(RD2/(N-1))
- 5460 SQN=SQR(N)
- 5470 XERR=XDEV/SQN
- 5480 YERR=YDEV/SQN
- 5490 '
- 5500 ' PRINT OUT RESULTS
- 5510 '
- 5520 PRINT#3,: PRINT#3,"A =";A
- 5530 PRINT#3,"B =";B
- 5540 PRINT#3,"R-squared =";R2
- 5550 PRINT#3,"# observations =";N
- 5560 PRINT#3,
- 5570 PRINT#3,"Mean of X =";XBAR," Std. Dev. =";XDEV," Std.Err. =";XERR
- 5580 PRINT#3,"Mean of Y =";YBAR," Std. Dev. =";YDEV," Std.Err. =";YERR
- 5590 PRINT#3,
- 5600 PRINT#3,"Sum of X =";XSUM," Sums of squares =";XSS
- 5610 PRINT#3,"Sum of Y =";YSUM," Sums of squares =";YSS
- 5620 PRINT#3,"Sum of X * Y =";XYS
- 5630 RETURN
- s of squares =";XSS
- 5610 PRINT#3,"Sum of Y =";YSUM," Sums of squares =";YSS
- 5620 PRINT#3